package com.ws.wsdemo2.test.netty;


/**
 * 消息格式协议类
 *
 * @author hbm
 *
 *         协议格式
 *
 *         |<-----------------消息头-------------------------->|<------------------------消息体------------------------->|校验和|
 *
 *         |消息开始标志(0xFF) 命令码 包长度 协议版本 | 消息体 | 0x00 |
 *
 *
 *         1、消息开始标志：占用1个字节， 标记一个消息包的开始。 固定设置为 0xFF。
 *
 *         2、命令码：占用4个字节，记录消息包的类别，采用左边填充 ‘0’ 的明文字符串格式。 实时行情：‘0201’； 心跳包：‘0203’；
 *         验证失败包：‘0100’； 验证成功包：‘0200‘；登录验证包: ‘0204’
 *         3、包长度：占用4个字节，指明消息体的字节长度（不包括消息头，消息尾）， 采用左边填充 ‘0’ 的明文字符串格式，例如
 *         ‘0231’，‘0000’。
 *
 *         4、协议版本：占用2个字节，记录协议版本号，采用左边填充 ‘0’ 的明文字符串格式。
 *
 *         5、校验和: 占用1个字节： 实时行情采用 CRC8 生成校验和，生成校验和的多项式是：g(x) = x^8 + x^2 + x + 1。
 *         心跳包，验证失败包，验证成功包，登录验证包的校验和固定设置为 0x00， 表示没有采用校验。
 *
 *         6、消息体采用 JSON的数据格式进行描述。
 */

public class Protocol {
    final public static byte FLAG = (byte) 0xFF;// 消息开始标志
    final public static byte[] VERSION = "02".getBytes();;// 协议版本
    final public static byte ZERO_CRC = (byte) 0x00;// 校验和

    public final static byte[] SPLIT_DELIMITER = {"|".getBytes()[0],ZERO_CRC};

    /* 命令字 */
    public class Command {
        final public static String REALTIME_MARKET = "0201";// 实时行情
        final public static String HEART_BEAT = "0203";// 心跳包
        final public static String AUTH_FAIL = "0100";// 验证失败包
        final public static String AUTH_SUCCESS = "0200";// 验证成功包
        final public static String AUTH_CHECK = "0204";// 登录验证包
    }

    /* 实时行情消息 */
    public class Type {
        final public static String UPDATE_MARKET = "0";// 更新实时行情
        final public static String OPEN_MARKET = "1";// 开市
        final public static String CLOSE_MARKET = "2";// 休市
    }

    /* 商品符号 */
    public class CommoditySymbol {
        final public static String AG1 = "AG1";// 白银9999（元/千克）
        final public static String AG15 = "AG15";// 白银9995（元/千克）
        final public static String AG100 = "AG100";// AG100白银（元/克）

        final public static String PDXA = "PDXA";// 钯金（元/克）
        final public static String PTXA = "PTXA";// 铂金（元/克）

        final public static String GDAG = "GDAG";// 粤贵银（元/千克）
        final public static String GDPD = "GDPD";// 粤贵钯（元/克）
        final public static String GDPT = "GDPT";// 粤贵铂（元/克）
        final public static String YDCL = "YDCL";// 粤东油（元/吨）
        final public static String GDAGV = "GDAGV";// 粤贵银锭（元/150千克）

    }
}
